package com.supermap.dubbo.api.warn.client;

import java.io.FileOutputStream;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;

import javax.activation.DataHandler;  
import javax.xml.datatype.XMLGregorianCalendar;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;  
  




import org.springframework.context.support.FileSystemXmlApplicationContext;

import com.supermap.dubbo.api.warn.*;


	/*
	 * ������λ: �й�����ֹ��������������Ԥ�������˿���
	 * ��ϵ��:  ����
	 * ��ϵ�绰: 13522330997
	 * */
public class Client {  
  
    public static void main(String[] args) throws Exception {  
        ClassPathXmlApplicationContext context=new ClassPathXmlApplicationContext("classpath:applicationContext.xml");  
    	
    	FileShare client = (FileShare)context.getBean("client");
    	
    	
       /**---------------通过调用该方法返回国家突发事件平台中的所有突发事件类型名称
		因预警事件存在更新可能,客户端用户需定期进行下载------------------------------**/
    	/*
        List<String> fileList=		  client.listWarnEvent();
        for(String f:fileList){
        	System.out.println(f);
        }
    	*/



		/**通过调用该方法返回国家突发事件平台中的所有省市县的行政区划信息
		 因行政区划信息存在变更可能,客户端用户需要定期进行下载**/
       /*
        List<String> info=		  client.listWarnRegionInfo();

        for(String f:info){
        	System.out.println(f);
        }*/
        
    	
    	
        /**--------- 获取默认10分钟内的基于预警zip包文件名中的时间串的文件名列表
		 14100241600000_20161214083011_11B17_YELLOW_CANCLE.zip-----*/
    	
    	/* List<String> defaultfileList= client.listFiles();
        if(defaultfileList.size()>0){
        	for(String a :defaultfileList){
        		System.out.println(a);
        			String target_dir="F:\\rcvtlqzip\\";  //zip保存路径
        	 	FileOutputStream fileOutPutStream = new FileOutputStream(target_dir+a);
        	 	DataHandler returnHandler = 	client.download(a);
        	 	returnHandler.writeTo(fileOutPutStream);
        	 	fileOutPutStream.flush();  
             	fileOutPutStream.close(); 
    			
        	}
        }else{
        	System.out.println("no data");
        } */
        
    	
        /**---------获取自定义的预警zip包文件名列表---
		 第一个. areaCode 代表预警区域  G:国家级  S:全部省级  A:全部预警区域   其余需自定义区域:
		 * 示例: 只获取国家级,填写  : "G"
		 *      获取全部省级,填写 : "S"
		 *      获取全部预警区域,填写:"A"
		 *      获取某个区域,填写 "36000041600000" ,多个区域中间用逗号隔开,如"36000041600000,36000041600001"
		 第二个 warnLevel 代表预警级别   包含:Red,Orange,Yellow,Blue,Unknown 如需多个级别的预警需要在各级别间用逗号隔开   如  "Red,Orange"
		 第三个. warnEvent 代表预警事件类型 如  台风事件:11B01  多个事件之间用逗号隔开 ,如需获取全部预警事件,则输入  "A"
		 第四个. itime     代表入库时间(单位:分钟),例如需要获取与当前系统时间30分钟内的预警数据  则输入  30
		 该方法的时间参数采用的是预警审核通过时间减去参数时间,从结果时间开始的所有审核通过放行的预警
         * **/
    	/*
    	List<String> custom_fileList= client.listFilesByElement("A", "RED,ORANGE,BLUE,YELLOW,UNKNOWN", "11B13", 40);
        if(custom_fileList.size()>0){
        for(String a :custom_fileList){
        	System.out.println(a);
        		String target_dir="F:\\rcvtlqzip\\";//zip保存路径
        	 FileOutputStream fileOutPutStream = new FileOutputStream(target_dir+a);  
        	 DataHandler returnHandler = 	client.download(a);
        	 returnHandler.writeTo(fileOutPutStream);
        	 fileOutPutStream.flush();  
             fileOutPutStream.close(); 
        }}else{
        	System.out.println("no data");
        }*/
        
        
       /** 获取默认的预警数据信息，该方法提供若干预警要素信息，不再需要zip包数据的解析
		默认方法提供10分钟内入库的包含Red,Orange,Yellow,Blue,Unknown类型的全部预警数据信息,返回类型为WarnCap实体的list类型
    	/*
        List<WarnCap> parseFileList= client.listWarnCap();
        if(parseFileList.size()>0){
        for(WarnCap a :parseFileList){
        	 System.out.println(a.getIdentifier()+" "+a.getEventTypeCN());
        }}else{
        	System.out.println("no data");
        }*/
        
        
        /**
         * 获取自定义的预警数据信息，该方法提供若干预警要素信息，不再需要zip包数据的解析
		 第一个. areaCode 代表预警区域  G:国家级  S:全部省级  A:全部预警区域   其余需自定义区域:
		 * 示例: 只获取国家级,填写  : "G"
		 *      获取全部省级,填写 : "S"
		 *      获取全部预警区域,填写:"A"
		 *      获取某个区域,填写 "36000041600000" ,多个区域中间用逗号隔开,如"36000041600000,36000041600001"
		 第二个 warnLevel 代表预警级别   包含:Red,Orange,Yellow,Blue,Unknown 如需多个级别的预警需要在各级别间用逗号隔开   如  "Red,Orange"
		 第三个. warnEvent 代表预警事件类型 如  台风事件:11B01  多个事件之间用逗号隔开 ,如需获取全部预警事件,则输入  "A"
		 第四个. itime     代表入库时间(单位:分钟),例如需要获取与当前系统时间30分钟内的预警数据  则输入  30
		 返回类型为WarnCap实体的list类型
		 该方法的时间参数采用的是预警审核通过时间减去参数时间,从结果时间开始的所有审核通过放行的预警
         **/
        List<WarnCap> customParseFileList= client.listWarnCapByElement("A", "RED,BLUE,YELLOW,YELLOW,UNKOWN", "A", 300);
        if(customParseFileList.size()>0){
        for(WarnCap a :customParseFileList){
        	 System.out.println(a.getIdentifier()+" "+a.getEventTypeCN()+" "+a.getEventType()+" "+a.getSeverity());
        }
        }else{
        	System.out.println("no data");
        }
      
        
        
    	
    	/**-----------获取最新入库的N条预警信息文件名-------------------------**/
    	
        List<String> fileListTop= client.listFilesByTop(30);
        if(fileListTop.size()>0){
        	for(String a :fileListTop){
        	 System.out.println(a);
        	  	 	 String target_dir="E:\\rcvtlqzip\\";//����zip���ļ���·��
        	 FileOutputStream fileOutPutStream = new FileOutputStream(target_dir+a);  
        	 DataHandler returnHandler = 	client.download(a);
        	 returnHandler.writeTo(fileOutPutStream);
        	 fileOutPutStream.flush();  
             fileOutPutStream.close();  
        	
        	}
        }else{
        	 System.out.println("no data");
        }
        
        
    	/***-----------获取当前数据库中最新入库的预警序列号-----------------*****/
         /*
         int maxWarnId=client.getMaxWarnId();
         System.out.println(maxWarnId);
         */
    	
    	
    	
    	/**-------------传入参数预警序列号，可以获取到包含该序列号及其后所有质检通过序列号的全部预警信息--------------------------*/
    	/*
    	 List<String> fileListById=client.listFilesByWarnId(client.getMaxWarnId()-30);
          if(fileListById.size()>0){
          for(String a :fileListById){
        	  System.out.println(a);
        	  
        	   	  String target_dir="F:\\rcvtlqzip\\";//zip保存路径
       	 
        	  //文件名称
        	  String fileName=a.substring(0, a.lastIndexOf("_"));
       	 
        	  //��ȡ��ǰԤ��˳���
        	  String currentWarnId=a.substring(a.lastIndexOf("_")+1);
        	  System.out.println("��ǰid="+currentWarnId+"��ǰ�ļ���="+fileName);
       	
        	  FileOutputStream fileOutPutStream = new FileOutputStream(target_dir+fileName);  
        	  DataHandler returnHandler = 	client.download(fileName);
        	  returnHandler.writeTo(fileOutPutStream);
        	  fileOutPutStream.flush();  
        	  fileOutPutStream.close(); 
         }}else{
        	 System.out.println("no data");
         }*/
    	
           
    	
    	/**------该方法通过传入时间类型参数,获取未到预警失效期但被要求下线的预警或者已经对外发布的错误预警的列表-----
    	 **------ 用户根据获取的预警列表信息对已经发布的预警进行下线处理.传入参数格式为: yyyy-mm-dd HH  dd与HH之间有一个空格  ------------**/
    
    	String searchDate="2017101012";  //时间格式 yyyymmddHH
    	List<String> OffLinefileList=client.getAutoOffLineWarn(searchDate);
    	if(OffLinefileList.size()>0){
    		for(String f:OffLinefileList){
    			System.out.println(f);
    		}
    	}else{
    		System.out.println("No qualified record!");
    	}
    	
    	
    	/**----------------获取自定义的预警数据信息，该方法提供若干预警要素信息，不再需要zip包数据的解析-------------------------**/
        /*
    	int n=232750;
    	List<WarnCap> WarnParseData=client.listWarnCapById(n);
    	
    	if(WarnParseData.size()>0){
    		for(WarnCap f:WarnParseData){
    			System.out.println(f.getHeadline());
    		}
    	}else{
    		System.out.println(" no data ");
    	}*/
    	
    	
        /**---------该方法通过传入参数获取自定义的省或市内发布的预警列表。----
		 该方法包含4个参数,分别为:
		 第一个. areaCode 代表预警区域,可以输入2位省级编码,4位市级编码以获取该省或市范围内的全部预警,可以传入多个参数,之间用逗号隔开
		 第二个 warnLevel 代表预警级别   包含:Red,Orange,Yellow,Blue,Unknown 如需多个级别的预警需要在各级别间用逗号隔开   如  "Red,Orange"
		 第三个. warnEvent 代表预警事件类型 如  台风事件:11B01  多个事件之间用逗号隔开 ,如需获取全部预警事件,则输入  "A"
		 第四个. itime     代表入库时间(单位:分钟),例如需要获取与当前系统时间30分钟内的预警数据  则输入  30
		 该方法的时间参数采用的是预警审核通过时间减去参数时间,从结果时间开始的所有审核通过放行的预警
         * **/
        /*
    	List<String> custom_fileListByRange= client.listFilesByRange ("11,5100,32", "RED,ORANGE,BLUE,YELLOW,UNKNOWN", "11B01,11B03", 40);
        if(custom_fileListByRange.size()>0){
        for(String a :custom_fileListByRange){
        	System.out.println(a);
        	String target_dir="F:\\rcvtlqzip\\";//zip保存路径
        	 FileOutputStream fileOutPutStream = new FileOutputStream(target_dir+a);  
        	 DataHandler returnHandler = 	client.download(a);
        	 returnHandler.writeTo(fileOutPutStream);
        	 fileOutPutStream.flush();  
             fileOutPutStream.close(); 
        }}else{
        	System.out.println("no data");
        }*/
    	
    	
    	
    	/**----------------------该方法通过传入时间参数获取预警列表。--------------------------
		 需要传入14位时间参数,格式为:yyyyMMddHHmmss 样例为:20170922080000
		 通过该参数检索数据库从该时间点开始的审核通过预警数据，提供给客户端
		 该方法可以避免获取重复预警
    	 * */
    	
    	/*String startTime="20170922080000";
    	List<String> custom_ListByTime= client.listFilesByTime(startTime);
        if(custom_ListByTime.size()>0){
        for(String a :custom_ListByTime){
        	System.out.println(a);
        		String target_dir="F:\\rcvtlqzip\\";//zip保存地址
        	 FileOutputStream fileOutPutStream = new FileOutputStream(target_dir+a);  
        	 DataHandler returnHandler = 	client.download(a);
        	 returnHandler.writeTo(fileOutPutStream);
        	 fileOutPutStream.flush();  
             fileOutPutStream.close(); 
        }}else{
        	System.out.println("no data");
        }*/
    	
    	
    	
    	  /**----------------------获取自定义的预警数据信息，该方法提供若干预警要素信息，不再需要zip包数据的解析--------------------------
		   需要传入14位时间参数,格式为:yyyyMMddHHmmss 样例为:20170922080000
		   通过该参数检索数据库从该时间点开始的审核通过预警数据，提供给客户端
		   该方法可以避免获取重复预警
    	   **/
    	/*String startTime="201709220800";
        List<WarnCap> parseWarnListByTime= client.listWarnCapByTime(startTime);
        if(parseWarnListByTime.size()>0){
        for(WarnCap a :parseWarnListByTime){
        	 System.out.println(a.getIdentifier()+" "+a.getEventTypeCN());
        }}else{
        	System.out.println("no data");
        }*/
    	
    	
    	
    } 
     
    

    
  
}  